package com.tim.source.common;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.tim.source.db.SqlUtil;
import com.tim.source.templete.HbmXmlProc;
import com.tim.source.util.StringUtil;

/**
 * 数据表转hbm.xml.
 * 
 * @author Tim.
 * 
 */
public class TableToHbmXml {
	public static String execute(String sql) {
		try {
			// 获取hbm头部信息.
			String head = HbmXmlProc.getHeadString(TableInfo.tableName);
			StringBuilder hbmStr = new StringBuilder(head);
			// 主键配置字符串
			String idString = "";
			// 属性配置
			StringBuilder propString = new StringBuilder();
			// 实例化列属性列表.
			TableInfo.fieldList = new ArrayList<FieldInfo>();
			// 获取数据库列信息.
			List<Object> params = new ArrayList<Object>();
			params.add(TableInfo.tableName);
			ResultSet rst = SqlUtil.getResultset(sql, params);
			while (rst.next()) {
				FieldInfo fieldInfo = new FieldInfo();
				// 数据表-列名
				String colName = rst.getString("colName");
				// 设置数据库列名
				fieldInfo.setColName(colName);
				// 数据表-列数据类型
				String dataType = rst.getString("datatype").toLowerCase();
				// 设置数据库对应数据类型
				fieldInfo.setDbDataType(dataType);
				// 数据表-列长度
				String length = rst.getString("length").toLowerCase();
				// 设置数据库对应长度
				fieldInfo.setDbLength(length);
				// 数据表-列是否为空
				String isNull = rst.getString("isNull").toLowerCase();
				// 设置是否为空
				fieldInfo.setIsNull(isNull);
				// 设置属性名称
				fieldInfo.setPropName(StringUtil.getProperName(colName));
				// 获取hbm.xml的property配置信息
				// 主键信息
				if (TableInfo.idColName.equals(colName)) {
					idString = HbmXmlProc.getIdContent(fieldInfo);
					hbmStr.append(idString);
				} else {
					propString.append(HbmXmlProc.getPropertyString(fieldInfo));
				}
				TableInfo.fieldList.add(fieldInfo);
			}
			hbmStr.append(propString);
			hbmStr.append(HbmXmlProc.getFootString());
			return hbmStr.toString();
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

	public static void setIdColName(String idSql) {
		try {
			// 重置主键列名
			TableInfo.idColName = "";
			List<Object> params = new ArrayList<Object>();
			params.add(TableInfo.tableName);
			ResultSet result = SqlUtil.getResultset(idSql, params);
			while (result.next()) {
				TableInfo.idColName = result.getString("colName");
				break;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
